#include <stdio.h>
#include <math.h>
// 交换两个元素的值
void swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

// 分区函数
int partition(int arr[], int low, int high)
{
    int pivot = arr[high]; // 选择最后一个元素作为基准
    int i = (low - 1);     // i指向小于基准的最后一个元素

    for (int j = low; j <= high - 1; j++)
    {
        // 如果当前元素小于或等于基准
        if (arr[j] <= pivot)
        {
            i++; // 增加小于基准的元素的索引
            swap(&arr[i], &arr[j]);
        }
    }
    swap(&arr[i + 1], &arr[high]);
    return (i + 1);
}
void quickSort(int arr[], int low, int high)
{
    if (low < high)
    {
        // pi 是分区后的基准元素的索引
        int pi = partition(arr, low, high);

        // 递归排序基准元素左边的部分
        quickSort(arr, low, pi - 1);

        // 递归排序基准元素右边的部分
        quickSort(arr, pi + 1, high);
    }
}
int main()
{
    int n, nums[1010], tar, tmp, ans;
    int *a, *b;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        scanf("%d", nums + i);
    }
    scanf("%d", &tar);
    quickSort(nums, 0, n - 1);
    ans = nums[0] + nums[1] + nums[2];
    for (int i = 0; i <= n - 3;i++)
    {
        a = nums + i + 1;
        b = nums + n - 1;
        tmp = nums[i] + *a + *b;
        while (a != b)
        {
            if (abs(tar - tmp) < abs(tar - ans))
                ans = tmp;
            if (tmp < tar)
            {
                tmp -= *a++;
                tmp += *a;
            }
            else if (tmp > tar)
            {
                tmp -= *b--;
                tmp += *b;
            }
            else
            {
                printf("%d", tar);
                return 0;
            }
        }
    }
    printf("%d",ans);
    // 输出nums
    //  for(int i=0;i<n;i++){
    //      printf("%d ",nums[i]);
    //  }
}